{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import tensorflow as tf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-3-8ef614dae8f3>:1: read_data_sets (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n",
      "WARNING:tensorflow:From C:\\Users\\84531\\Anaconda3\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:260: maybe_download (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please write your own downloading logic.\n",
      "WARNING:tensorflow:From C:\\Users\\84531\\Anaconda3\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\base.py:252: _internal_retry.<locals>.wrap.<locals>.wrapped_fn (from tensorflow.contrib.learn.python.learn.datasets.base) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use urllib or similar directly.\n",
      "Successfully downloaded train-images-idx3-ubyte.gz 9912422 bytes.\n",
      "WARNING:tensorflow:From C:\\Users\\84531\\Anaconda3\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:262: extract_images (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-images-idx3-ubyte.gz\n",
      "Successfully downloaded train-labels-idx1-ubyte.gz 28881 bytes.\n",
      "WARNING:tensorflow:From C:\\Users\\84531\\Anaconda3\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:267: extract_labels (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use tf.data to implement this functionality.\n",
      "Extracting ./train-labels-idx1-ubyte.gz\n",
      "Successfully downloaded t10k-images-idx3-ubyte.gz 1648877 bytes.\n",
      "Extracting ./t10k-images-idx3-ubyte.gz\n",
      "Successfully downloaded t10k-labels-idx1-ubyte.gz 4542 bytes.\n",
      "Extracting ./t10k-labels-idx1-ubyte.gz\n",
      "WARNING:tensorflow:From C:\\Users\\84531\\Anaconda3\\lib\\site-packages\\tensorflow\\contrib\\learn\\python\\learn\\datasets\\mnist.py:290: DataSet.__init__ (from tensorflow.contrib.learn.python.learn.datasets.mnist) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Please use alternatives such as official/mnist/dataset.py from tensorflow/models.\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"./\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4, idx+1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "至此，需要使用的图像相关的训练数据、验证数据和测试数据都下好了，后面开始进行深度学习计算"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "先建立符号，输入x，标签y，学习率（超参数）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = tf.placeholder(\"float\", [None, 784])\n",
    "y = tf.placeholder(\"int64\", [None])\n",
    "learning_rate = tf.placeholder(\"float\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def initialize(shape, stddev=0.1):\n",
    "  return tf.truncated_normal(shape, stddev=0.1)"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "tf.truncated_normal函数的解释：\n",
    "tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)        \n",
    "从截断的正态分布中输出随机值。 shape表示生成张量的维度，mean是均值，stddev是标准差。这个函数产生正太分布，均值和标准差自己设定。这是一个截断的产生正太分布的函数，就是说产生正太分布的值如果与均值的差值大于两倍的标准差，那就重新生成。和一般的正太分布的产生随机数据比起来，这个函数产生的随机数与均值的差距不会超过两倍的标准差，但是一般的别的函数是可能的。       \n",
    "生成的值服从具有指定平均值和标准偏差的正态分布，如果生成的值大于平均值2个标准偏差的值则丢弃重新选择。        \n",
    "在正态分布的曲线中，横轴区间（μ-σ，μ+σ）内的面积为68.268949%。         \n",
    "横轴区间（μ-2σ，μ+2σ）内的面积为95.449974%。         \n",
    "横轴区间（μ-3σ，μ+3σ）内的面积为99.730020%。         \n",
    "X落在（μ-3σ，μ+3σ）以外的概率小于千分之三，在实际问题中常认为相应的事件是不会发生的，基本上可以把区间（μ-3σ，μ+3σ）看作是随机变量X实际可能的取值区间，这称之为正态分布的“3σ”原则。         \n",
    "在tf.truncated_normal中如果x的取值在区间（μ-2σ，μ+2σ）之外则重新进行选择。这样保证了生成的值都在均值附近。参数:shape: 一维的张量，也是输出的张量。\n",
    "mean: 正态分布的均值。\n",
    "stddev: 正态分布的标准差。\n",
    "dtype: 输出的类型。\n",
    "seed: 一个整数，当设置之后，每次生成的随机数都一样。\n",
    "name: 操作的名字。"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "为了让网络更高效的运行，多个数据会被组织成一个batch送入网络，两个placeholder的第一个维度就是batchsize，因为我们这里还没有确定batchsize，所以第一个维度留空。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From C:\\Users\\84531\\Anaconda3\\lib\\site-packages\\tensorflow\\python\\framework\\op_def_library.py:263: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Colocations handled automatically by placer.\n"
     ]
    }
   ],
   "source": [
    "L1_units_count = 100\n",
    "\n",
    "W_1 = tf.Variable(initialize([784, L1_units_count]))\n",
    "b_1 = tf.Variable(initialize([L1_units_count]))\n",
    "logits_1 = tf.matmul(x, W_1) + b_1\n",
    "output_1 = tf.nn.relu(logits_1)\n",
    "\n",
    "L2_units_count = 10 \n",
    "W_2 = tf.Variable(initialize([L1_units_count, L2_units_count]))\n",
    "b_2 = tf.Variable(initialize([L2_units_count]))\n",
    "logits_2 = tf.matmul(output_1, W_2) + b_2  \n",
    "\n",
    "logits = logits_2"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "接下来定义loss和用于优化网络的优化器。loss计算使用了sparse_softmax_cross_entropy_with_logits, 这样做的好处是labels可以不用手动做one_hot省了一些麻烦。这里使用了sgd优化器，学习率为可以根据需要设定（在session真正运算时进行设置，这里只是计算图）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=learning_rate).minimize(cross_entropy_loss)"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "\n",
    "需要注意的是，上面的网络，最后输出的是未经softmax的原始logits，而不是概率分布， 要想看到概率分布，还需要做一下softmax。\n",
    "将输出的结果与正确结果进行对比，即可得到我们的网络输出结果的准确率。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred = tf.nn.softmax(logits)\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y)\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "saver用于保存或恢复训练的模型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 32\n",
    "trainig_step = 1000\n",
    "\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "以上定义的所有操作，均为计算图，也就是仅仅是定义了网络的结构，实际需要运行的话，还需要创建一个session，并将数据填入网络中。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps, the loss is 0.462705, the validation accuracy is 0.8506\n",
      "after 200 training steps, the loss is 0.337662, the validation accuracy is 0.912\n",
      "after 300 training steps, the loss is 0.0511471, the validation accuracy is 0.927\n",
      "after 400 training steps, the loss is 0.0894668, the validation accuracy is 0.9304\n",
      "after 500 training steps, the loss is 0.1903, the validation accuracy is 0.9328\n",
      "after 600 training steps, the loss is 0.0371122, the validation accuracy is 0.935\n",
      "after 700 training steps, the loss is 0.0448875, the validation accuracy is 0.9448\n",
      "after 800 training steps, the loss is 0.199946, the validation accuracy is 0.9476\n",
      "after 900 training steps, the loss is 0.41337, the validation accuracy is 0.9438\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.9461\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "\n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels}\n",
    "\n",
    "    for i in range(trainig_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss = sess.run(\n",
    "            [optimizer, cross_entropy_loss],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: 0.3  #这里是学习率\n",
    "            })\n",
    "\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if i > 0 and i % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i, loss, validate_accuracy))\n",
    "            saver.save(sess, './model.ckpt', global_step=i)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "下面，用我们训练的模型做一个测试。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From C:\\Users\\84531\\Anaconda3\\lib\\site-packages\\tensorflow\\python\\training\\saver.py:1266: checkpoint_exists (from tensorflow.python.training.checkpoint_management) is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "Use standard file APIs to check for files with this prefix.\n",
      "INFO:tensorflow:Restoring parameters from ./model.ckpt-900\n",
      "0.875\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(mnist.test.labels[idx],\n",
    "                                                  order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "对模型训练过程的理解\n",
    "\n",
    "计算损失函数对权值的偏导数得到梯度，再将旧的权值减去学习率与梯度的乘积得到新的权值\n",
    "\n",
    "对计算图的理解\n",
    "\n",
    "导入tf框架时既生成一个计算图，计算图用节点形式保存由tf框架创建的所有张量（tensor），包括输入、输出、损失、优化器等，张量之间的计算关系和计算顺序构成计算的流程（flow），用于session时根据计算图的流程进行训练。\n",
    "\n",
    "此处训练效果不好的原因首先可能是有初始化方式，优化方式，网络层数的原因，另外可以考虑将学习率进行动态调整"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
